package cas;

/**
 * 描述：模拟CAS操作
 */
public class SimulatedCAS {
    private volatile int value;
    /**
     * 模拟CAS操作
     * @param expectedValue 期望值
     * @param newValue 新值
     * @return 旧值
     */
    public synchronized int compareAndSwap(int expectedValue, int newValue) {
        int oldValue = value;
        // 期望值和旧值相等，才会更新
        if (oldValue == expectedValue) {
            value = newValue;
            System.out.println("更新成功");
        } else {
            System.out.println("更新失败");
        }
        return oldValue;
    }

    public static void main(String[] args) {
        SimulatedCAS cas = new SimulatedCAS();
        cas.value = 100;
        // 期望值和旧值相等，更新成功
        cas.compareAndSwap(100, 200);
        // 期望值和旧值不相等，更新失败
        cas.compareAndSwap(100, 500);
        System.out.println(cas.value);
    }
}
